角色 内容 概述 快速设置 角色定义 更多细节 概述 现实组织概念: 职务即身份(Title),它是指人员在组织中所担任的角色以及这个角色赋予他的身份。 职务代表身份,因此也可以代表在组织中的等级,职务一般不表示该人员的具体职责,而是对其在组织中发挥的作用进行概括,例如经理、部长、校长、职员这些都是职务,通过这些我们无法了解其具体职责,但是能大致知晓该人员在组织中的地位和发挥的作用。 职位即工作(Job),它是指企业员工所从事工作的类别。 职务由一组主要职责相似的职位(或岗位)所组成,是指承担一系列工作职责的某一任职者所对应的组织位置,它是组织的基本构成单位,它是由实现企业职能的一个个具体活动所构成的相对独立体。比如会计、出纳、顾问、质检员等。 岗位即具体位置(Position),它是指在一个特定的企业组织中、在一个特定的时间内、由一个特定的人所担负的一个或数个任务所组成。 简单来讲,职务是个人的角色、身份或地位,职位是相同类别岗位的泛指和统称,岗位是职位中某个(或某几个)具体职责的专称。 角色的权限设置有: 1. 访问级别: 2. 访问对象: 快速设置 角色定义 角色定义: ==Access level访问级别== 非常关键的安全选项。该选项定义了角色访问AD对象的级别。 按[概述](http://idempiere_guide_sm.mydoc.io?v=${version}&t=186541)分类,控制对象访问权限org,client,client+org,system,system+client,ALL六种,因后三种都包含System,所以角色统一后变成四种:org,client,client+org,system。 其系统判断的逻辑在:MRole.java 2238行。 相关SQL语句为: select a. name,b.name , a.AccessLevel from ad_table a inner join ad_ref_list b on b.value = a.AccessLevel inner JOIN ad_window c on c.ad_WINDOW_id=a.ad_WINDOW_id where b.ad_reference_id=5 AND c.isactive='Y' and b.value ='1' /* value=1,2,3,4,6,7 */ order by 3,1 ==Manual(手动分配权限)== 1. System在后台AD中新建了一个窗口(或者其他AD对象)。 2. 如果role的Manual选项是否,那么role将自动继承新窗口的访问权限。 3. 如果role的Manual选项是真,那么管理员必须手动在每个实体的role-window access下手工添加该窗口权限。 关键设置点 1、使用用户组织访问:Use User Org Access,该选项将单独使用用户的组织的权限AD_User_OrgAccessq,而不使用角色的组织访问权限。 2、组织访问:AD_Role_OrgAccess表,定义角色的组织访问权限 4、分配用户:AD_User_Roles表,角色可以分配给多个用户。 5、手工Manual:默认不选择,表示该角色自动分配所有新AD对象(比如窗口、报表)的访问权限。 6、显示会计Show Accouting:不选择,单据完成将不显示“过账”按钮,且无法使用工作台的财务信息窗口。 7、显示财务信息Allow info Account:不选择,工作台不显示“财务信息”链接。 8、维护变更日志Maintain Change Log:表示角色可以看到“记录信息”的所有字段变更,并可以使用Change Audit变更审计窗口中“撤销变更”“再次变更”流程来操作数据。 ==高级用户== Functionality provided by e.g. Window Customization can have an impact on the security of the system because it might be misused. A possible solution is to flag certain windows / forms / processes to be security related and therefore not being automatically attached to a role (especially not the automatically created clientxyzAdmin role) but only through manual intervention (by SuperUser?). advanced role is not intended for end-users, is mostly intended for Information technology (IT) roles that administer the system - advanced roles have access to many fields that are documented and exposed security holes in the system ==Master Roles== Actually iDempiere supports role inheritance - a role can be composed by included roles, and in such case it inherits the configuration for menu access options and for org access. This feature extended the concept to enable defining master roles in System client, the master roles in System client can have menu access options (but cannot have org access options, because orgs are not available on System). - The Client (not System) roles can inherit from System roles the access options, and configure exceptions for the roles: adding specific access not included in master role or disabling (adding and inactivating) options included in the master role - The inheritance work just for menu items, documents, but not for org. - Users cannot be assigned to Master Roles. - The list of "Included roles" only show "Master Roles" ==个人锁Personal Lock== 位置:【角色】-个人锁Personal Lock,允许用户锁定个人记录。 位置:【角色】-个人记录访问Personal Access,可以访问任何个人记录。 http://wiki.adempiere.net/Private_Record_Lock ==关于组织== 如果角色无组织A的权限,含有A组织的所有记录均被系统过滤,对该角色隐藏。 更多细节 ==关于ad_uer== 默认:全部 问题:添加员工,隐私问题;添加联系人,商业机密被其他部门泄露问题;主数据权限维护问题 方案: 1. 设置实体权限,肯定不行,用户不象账套信息,数据可能经常有维护。 2. 设置实体+组织, 7-全部 ad_user 添加员工,隐私问题 添加联系人,如何控制权限访问(默认所有人可见) 1. 只有销售部门可见 一个有意思的场景: 1、10个组织,每个组织100个人,共1000个人。 2、新建一个用户(其角色可以访问10个组织) 3、登录选择组织1,但是可以看到10个组织的1000个人。 4、需求:登录组织1,只看到组织1中的100人。 5、可能也有需求:角色有10组织权限,就需要能看到10个组织的所有1000人) 6、方案:上面2个需求是互相矛盾的,可以实现的方案 A. 窗口字段的动态规则:过滤组织为登录组织(上下文变量AD_Org_ID=@#AD_Org_ID@),但影响所有其他实体。 B. 窗口自定义:可以单独分实体,分角色,显示不同的窗口内容。(AD字典-window customization ) C. 复制2个窗口,使用不同的动态规则,满足不同场景需求。 权限建议 0. 组织访问权限,尽量简单。避免角色属于多个组织(如果组织数据屏蔽要求高),否则角色将看到多个组织的数据,且过滤麻烦(需增加动态检验规则,数据按登录组织过滤) 1. 访问权限控制应生成相关系统计划和正式文档。 2. 从简单到复杂,慢慢增加权限。 3. 角色是安全控制的第一步。如果一个角色无窗口的访问权限,即使该角色有窗口表的访问权限也无所谓。 4. 只有当你熟悉安全权限设置后,再开始创建新角色,直到规则满意后再分配给用户。当你新建一个新实体后,立即更改用户密码并限制其角色权限。 5. 如果角色不允许生成/导出报表,那么角色在该表上定义的访问权限就被忽略。 6. 角色必须拥有报表权限才能使用导出功能。 7. 安全设置会被缓存,如果角色权限变动需要重置缓存或者再登陆才能更新。<已测试:记录访问控制需要登陆> 8. 用户只能锁住拥有访问权限的记录,反之无法锁定别人数据。 9. ”包含Include“之类选项是最严格的访问控制,不选择”除开Exclude“之类的选项表明所有直接包含的数据将被排除。 10. 如果限制某个字段为只读,确保该字段不需要输入或者本身使用缺省值,这样用户可以新建记录。 11. 如果限制某个必填字段的访问,确保该字段有缺省值。 12. 不能排除必填字段的访问(比如:不显示) 13. 如果想限制敏感数据的访问(比如具体总账科目),对该记录定义”记录层访问控制Record Level Access Security“。同时选中”除开Exclude“和”独立记录Dependant Entities“选项。用户将无法在科目元素窗口中看到该记录,同时也无法查看总账,明细账中看到该科目记录,也无法在查询或者报表界面使用该科目。 14. 如果你定义了记录访问控制规则,必须开启角色的”记录个人锁“选项。